import sys
from functools import lru_cache
input = sys.stdin.readline
def inp():
return(int(input()))
def inlt():
return(list(map(int,input().split())))
def insr():
s = input()
return(list(s[:len(s) - 1]))
def invr():
return(map(int,input().split()))
def bit_length(i):
s = bin(i) s = s.lstrip('-0b') return len(s)
def main():
m = inp()
lis = []
for _ in range(m):
lis.append(input().split())
edge = [[0] * m for _ in range(m)]
for i in range(m):
for j in range(i + 1, m):
if lis[i][0] == lis[j][0] or lis[i][1] == lis[j][1]:
edge[i][j] = 1
edge[j][i] = 1
@lru_cache(None)
def dfs(mask, last = -1):
tmp = 0
for i in range(m):
if last == -1:
tmp = max(tmp, dfs(mask | (1 << i), i))
elif mask & (1 << i) == 0 and edge[last][i] == 1:
tmp = max(tmp, dfs(mask | (1 << i), i))
return tmp if tmp != 0 else bin(mask).count('1')
print(m - dfs(0))
if __name__ == "__main__":
n = inp()
for i in range(n):
main()
507B - Amr and Pins | 379A - New Year Candles |
1154A - Restoring Three Numbers | 750A - New Year and Hurry |
705A - Hulk | 492B - Vanya and Lanterns |
1374C - Move Brackets | 1476A - K-divisible Sum |
1333A - Little Artem | 432D - Prefixes and Suffixes |
486A - Calculating Function | 1373B - 01 Game |
1187A - Stickers and Toys | 313B - Ilya and Queries |
579A - Raising Bacteria | 723A - The New Year Meeting Friends |
302A - Eugeny and Array | 1638B - Odd Swap Sort |
1370C - Number Game | 1206B - Make Product Equal One |
131A - cAPS lOCK | 1635A - Min Or Sum |
474A - Keyboard | 1343A - Candies |
1343C - Alternating Subsequence | 1325A - EhAb AnD gCd |
746A - Compote | 318A - Even Odds |
550B - Preparing Olympiad | 939B - Hamster Farm |